package com.qingzhuge.member.service;

import com.qingzhuge.member.entity.SysMember;
import com.qingzhuge.member.entity.SysMemberConfig;
import com.qingzhuge.member.dto.*;
import com.qingzhuge.service.IBasePkLongService;

/**
 * @author : zero.xiao
 * @description : 会员
 * @date :2018/6/8 0008 下午 15:04
 * @since : 1.0.0
 * @modified :
 */
public interface ISysMemberService extends IBasePkLongService<SysMember> {


    String encodePassword(String password);

    boolean matchesPassword(String pawPassword, String encodePassword);

    /**
     * 修改密码
     * @param userId       用户ID
     * @param password     原密码
     * @param newPassword  新密码
     */
    SysMember updatePassword(Long userId, String password, String newPassword);

    /**
     * 按用户名查询
     *
     * @param username 用户名
     * @return 用户
     */
    SysMember findByUsername(String username);
    SysMember findByMobile(String mobile);

    void updateMobile(Long uid, String mobile);

    SysMember findByEmail(String email);
    SysMember findByUsernameAndMobile(String username,String mobile);
    SysMember findByUsernameOrMobile(String username,String mobile);
    SysMember findShortInfo(Long id);

    /**
     * 用户登录,用户不存在则自动注册
     */
    UserLoginResponse login(UserLoginRequest request);

    /**
     * 注册用户,按正常注册逻辑验证
     */
    UserRegisterResponse register(UserRegisterRequestDto userRegisterRequest);

    /**注册用户,方法内只作mobile格式验证*/
    SysMember registerMember(UserRegisterRequestDto request);
    /**
     * 校验过程
     */
    CheckAuthorizationResponse validToken(CheckAuthorizationRequest request);
    /**
     * 退出
     * @param token token
     */
    void expireToken(String token);

    UserLoginResponse mobileLogin(UserLoginRequest request, UserLoginResponse response);

    UserLoginResponse setMemberToken(UserLoginResponse response,
                                     SysMember user);

    /**重置密码验*/
    UserRegisterResponse resetPwd(UserRegisterRequestDto request);

    SysMemberConfig getMemberConfig();

    void setMemberConfig(SysMemberConfig config);
}

